package com.sinder.campus_prophet.core.annotation;

import org.apache.logging.log4j.core.config.Order;
import org.springframework.core.Ordered;

import java.lang.annotation.*;

/**
 * 自定义注解
 * 实现控制器访问次数限制
 * ：主要防止采集教务系统接口获取次数过多导致IP被封
 * 注解使用：@RequestLimit(count=10, time=5000)
 *
 * @Retention：元注解(也就是注解的注解)_用来表示注解的生命周期
 *      => RetentionPolicy.RUNTIME：（运行时也存在）注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在，需要在运行时去动态获取注解信息
 * @Target：注解的作用目标
 *      => ElementType.METHOD=方法，ElementType.TYPE=类，接口，注解，枚举，ElementType.PARAMETER=方法参数  等等
 * @Documented：生成文档
 * @Oeder：定义Spring IOC容器中Bean的执行顺序的优先级
 * @author v-xyingde
 * @date 2023/3/23/9:57
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
//最高优先级
@Order(Ordered.HIGHEST_PRECEDENCE)
public @interface RequestLimit {
    /**
     *
     * 允许访问的次数，默认值MAX_VALUE
     */
    int count() default Integer.MAX_VALUE;

    /**
     *
     * 时间段，单位为毫秒，默认值一分钟
     */
    long time() default 60000;
}
